package com.itheima.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.dto.SmsCouponParam;
import com.itheima.mapper.SmsCouponMapper;
import com.itheima.pojo.SmsCoupon;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;
import java.util.List;

@DubboService
public class SmsCouponImpl implements SmsCouponApi{
    @Autowired
    private SmsCouponMapper smsCouponMapper;
    /**
     * 添加优惠券
     * @param smsCoupon 封装的请求体
     * @return
     */
    @Override
    public void create(SmsCoupon smsCoupon) {
        smsCouponMapper.insert(smsCoupon);
    }

    /**
     * 删除优惠券  判断优惠期是否已过期,过期则删除,删除则影响行数,返回true
     * @param id
     * @return
     */
    @Override
    public boolean deleteById(Integer id) {
        LambdaQueryWrapper<SmsCoupon> wrapper=new LambdaQueryWrapper<>();
        wrapper.eq(SmsCoupon::getId,id);
        wrapper.le(SmsCoupon::getEndTime, LocalDateTime.now());
        int count = smsCouponMapper.delete(wrapper);
        if(count<=0){
            return false;
        }else {
            return true;
        }
    }

    /**
     * 优惠券修改
     * @param smsCoupon
     */
    @Override
    public void updateById(SmsCoupon smsCoupon) {
        smsCouponMapper.updateById(smsCoupon);
    }
    /**
     * 根据优惠券名称和类型分页获取优惠券列表,,模糊查询  分页
     * @param name
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     */
    @Override
    public IPage<SmsCoupon> list(String name, Integer type, Integer pageNum, Integer pageSize) {
        IPage<SmsCoupon> iPage=new Page<>(pageNum,pageSize);
        LambdaQueryWrapper<SmsCoupon> wrapper=new LambdaQueryWrapper<>();
        wrapper.like(name!=null,SmsCoupon::getName,name);
        wrapper.like(type!=null,SmsCoupon::getType,type);
        return smsCouponMapper.selectPage(iPage,wrapper);
    }

    /**
     * 获取单个优惠券信息
     * @param id
     * @return
     */
    @Override
    public SmsCoupon getSmsCouponById(Integer id) {
        return smsCouponMapper.selectById(id);
    }

    /**
     * 获取所有的SmsCoupon
     * @return
     */
    @Override
    public List<SmsCoupon> getAllSmsCoupon() {
        return smsCouponMapper.selectList(new LambdaQueryWrapper<SmsCoupon>());
    }

    /**
     * 判断是否重复
     * @param smsCouponParam
     * @return
     */
    @Override
    public boolean isExist(SmsCouponParam smsCouponParam) {
        LambdaQueryWrapper<SmsCoupon> wrapper=new LambdaQueryWrapper<>();
        wrapper.eq(SmsCoupon::getName,smsCouponParam.getName());
        SmsCoupon smsCoupon = smsCouponMapper.selectOne(wrapper);
        if(smsCoupon!=null){
            return false;
        }else {
            return true;
        }
    }
}
